﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://schemas.microsoft.com/xps/2005/06" xmlns="http://schemas.microsoft.com/xps/2005/06" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="http://schemas.microsoft.com/xps/2005/06/resourcedictionary-key" elementFormDefault="qualified" blockDefault="#all">

    <xs:import namespace="http://schemas.microsoft.com/xps/2005/06/resourcedictionary-key" />
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" />

    <!-- Names used for types and groups:

        ST_*        simpleType
        CT_*        complexType
        G_*            group
        AG_*        attributeGroup

    -->

    <!-- Individual real number patterns
    All patterns using numbers now use <whitespace value="collapse">. As a result, any whitespace in the pattern can be
    expressed as:
    mandatory whitespace, one or more:  " "
    optional whitespace, zero or more:  " ?"

    For better readability, each pattern using numbers is also described in a comment using
    one of the following pattern designators.

    The actual patterns are generated by replacement by the schema publication process.
    -->
    <!--DEFINE [pint]       "([1-9][0-9]*)" -->
    <!--DEFINE [uint]       "([0-9]+)" -->
    <!--DEFINE [dec]        "(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+)))" -->
    <!--DEFINE [rn]         "((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" -->
    <!--DEFINE [prn]        "(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" -->
    <!--DEFINE [scs]        "( ?, ?)" -->



        <!-- Complex Types -->
    <xs:complexType name="CT_MatrixTransform">
        <xs:attributeGroup ref="AG_MatrixTransform" />
    </xs:complexType>

    <xs:complexType name="CT_SolidColorBrush">
        <xs:attributeGroup ref="AG_Brush" />
        <xs:attributeGroup ref="AG_SolidColorBrush" />
    </xs:complexType>

    <xs:complexType name="CT_ImageBrush">
        <xs:sequence>
            <xs:element ref="ImageBrush.Transform" minOccurs="0" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_Brush" />
        <xs:attributeGroup ref="AG_TileBrush" />
        <xs:attributeGroup ref="AG_ImageBrush" />
    </xs:complexType>

    <xs:complexType name="CT_VisualBrush">
        <xs:sequence>
            <xs:element ref="VisualBrush.Transform" minOccurs="0" />
            <xs:element ref="VisualBrush.Visual" minOccurs="0" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_Brush" />
        <xs:attributeGroup ref="AG_TileBrush" />
        <xs:attributeGroup ref="AG_VisualBrush" />
    </xs:complexType>

    <xs:complexType name="CT_LinearGradientBrush">
        <xs:sequence>
            <xs:element ref="LinearGradientBrush.Transform" minOccurs="0" />
            <xs:element ref="LinearGradientBrush.GradientStops" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_Brush" />
        <xs:attributeGroup ref="AG_GradientBrush" />
        <xs:attributeGroup ref="AG_LinearGradientBrush" />
    </xs:complexType>

    <xs:complexType name="CT_RadialGradientBrush">
        <xs:sequence>
            <xs:element ref="RadialGradientBrush.Transform" minOccurs="0" />
            <xs:element ref="RadialGradientBrush.GradientStops" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_Brush" />
        <xs:attributeGroup ref="AG_GradientBrush" />
        <xs:attributeGroup ref="AG_RadialGradientBrush" />
    </xs:complexType>

    <xs:complexType name="CT_GradientStop">
        <xs:attributeGroup ref="AG_GradientStop" />
    </xs:complexType>

    <xs:complexType name="CT_PathGeometry">
        <xs:sequence>
            <xs:element ref="PathGeometry.Transform" minOccurs="0" />
            <xs:element ref="PathFigure" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_PathGeometry" />
    </xs:complexType>

    <xs:complexType name="CT_Glyphs">
        <xs:sequence>
            <xs:element ref="Glyphs.RenderTransform" minOccurs="0" />
            <xs:element ref="Glyphs.Clip" minOccurs="0" />
            <xs:element ref="Glyphs.OpacityMask" minOccurs="0" />
            <xs:element ref="Glyphs.Fill" minOccurs="0" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_Glyphs" />
    </xs:complexType>

    <xs:complexType name="CT_Path">
        <xs:sequence>
            <xs:element ref="Path.RenderTransform" minOccurs="0" />
            <xs:element ref="Path.Clip" minOccurs="0" />
            <xs:element ref="Path.OpacityMask" minOccurs="0" />
            <xs:element ref="Path.Fill" minOccurs="0" />
            <xs:element ref="Path.Stroke" minOccurs="0" />
            <xs:element ref="Path.Data" minOccurs="0" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_Path" />
        <xs:attributeGroup ref="AG_AutomationProvider" />
        <xs:attributeGroup ref="AG_SnapsToDevicePixels" />
    </xs:complexType>

    <xs:complexType name="CT_PathFigure">
        <xs:sequence>
            <xs:choice maxOccurs="unbounded">
                <xs:element ref="PolyLineSegment" />
                <xs:element ref="PolyBezierSegment" />
                <xs:element ref="ArcSegment" />
                <xs:element ref="PolyQuadraticBezierSegment" />
            </xs:choice>
        </xs:sequence>
        <xs:attributeGroup ref="AG_PathFigure" />
    </xs:complexType>

    <xs:complexType name="CT_ArcSegment">
        <xs:attributeGroup ref="AG_ArcSegment" />
    </xs:complexType>

    <xs:complexType name="CT_PolyQuadraticBezierSegment">
        <xs:attributeGroup ref="AG_PolyQuadraticBezierSegment" />
    </xs:complexType>

    <xs:complexType name="CT_PolyLineSegment">
        <xs:attributeGroup ref="AG_PolyLineSegment" />
    </xs:complexType>

    <xs:complexType name="CT_PolyBezierSegment">
        <xs:attributeGroup ref="AG_PolyBezierSegment" />
    </xs:complexType>

    <xs:complexType name="CT_Canvas">
        <xs:sequence>
            <xs:element ref="Canvas.Resources" minOccurs="0" />
            <xs:element ref="Canvas.RenderTransform" minOccurs="0" />
            <xs:element ref="Canvas.Clip" minOccurs="0" />
            <xs:element ref="Canvas.OpacityMask" minOccurs="0" />
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="Path" />
                <xs:element ref="Glyphs" />
                <xs:element ref="Canvas" />
            </xs:choice>
        </xs:sequence>
        <xs:attributeGroup ref="AG_Canvas" />
        <xs:attributeGroup ref="AG_AutomationProvider" />
    </xs:complexType>

    <xs:complexType name="CT_ResourceDictionary">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="ImageBrush" />
            <xs:element ref="LinearGradientBrush" />
            <xs:element ref="RadialGradientBrush" />
            <xs:element ref="VisualBrush" />
            <xs:element ref="SolidColorBrush" />
            <xs:element ref="MatrixTransform" />
            <xs:element ref="PathGeometry" />
            <xs:element ref="Path" />
            <xs:element ref="Glyphs" />
            <xs:element ref="Canvas" />
        </xs:choice>
        <xs:attributeGroup ref="AG_ResourceDictionary" />
    </xs:complexType>

    <xs:complexType name="CT_FixedPage">
        <xs:sequence>
            <xs:element ref="FixedPage.Resources" minOccurs="0" />
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="Path" />
                <xs:element ref="Glyphs" />
                <xs:element ref="Canvas" />
            </xs:choice>
        </xs:sequence>
        <xs:attributeGroup ref="AG_FixedPage" />
    </xs:complexType>

    <xs:complexType name="CT_FixedDocument">
        <xs:sequence>
            <xs:element ref="PageContent" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CT_PageContent">
        <xs:sequence>
            <xs:element ref="PageContent.LinkTargets" minOccurs="0" />
        </xs:sequence>
        <xs:attributeGroup ref="AG_PageContent" />
    </xs:complexType>

    <xs:complexType name="CT_FixedDocumentSequence">
        <xs:sequence>
            <xs:element ref="DocumentReference" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CT_DocumentReference">
        <xs:attributeGroup ref="AG_DocumentReference" />
    </xs:complexType>

    <xs:complexType name="CT_LinkTarget">
        <xs:attributeGroup ref="AG_LinkTarget" />
    </xs:complexType>

    <xs:complexType name="CT_CP_LinkTargets">
        <xs:sequence>
            <xs:element ref="LinkTarget" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CT_CP_Transform">
        <xs:sequence>
            <xs:element ref="MatrixTransform" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CT_CP_Visual">
        <xs:choice>
            <xs:element ref="Path" />
            <xs:element ref="Glyphs" />
            <xs:element ref="Canvas" />
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="CT_CP_GradientStops">
        <xs:sequence>
            <xs:element ref="GradientStop" minOccurs="2" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CT_CP_Geometry">
        <xs:sequence>
        <xs:element ref="PathGeometry" />
      </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CT_CP_Brush">
        <xs:choice>
            <xs:element ref="ImageBrush" />
            <xs:element ref="LinearGradientBrush" />
            <xs:element ref="RadialGradientBrush" />
            <xs:element ref="SolidColorBrush" />
            <xs:element ref="VisualBrush" />
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="CT_CP_Resources">
        <xs:sequence minOccurs="0">
            <xs:element ref="ResourceDictionary" />
        </xs:sequence>
    </xs:complexType>

    <!-- Root elements -->
    <xs:element name="MatrixTransform" type="CT_MatrixTransform">
        </xs:element>

    <xs:element name="SolidColorBrush" type="CT_SolidColorBrush">
        </xs:element>

    <xs:element name="ImageBrush" type="CT_ImageBrush">
        </xs:element>

    <xs:element name="VisualBrush" type="CT_VisualBrush">
        </xs:element>

    <xs:element name="LinearGradientBrush" type="CT_LinearGradientBrush">
        </xs:element>

    <xs:element name="RadialGradientBrush" type="CT_RadialGradientBrush">
        </xs:element>

    <xs:element name="Glyphs" type="CT_Glyphs">
        </xs:element>

    <xs:element name="Path" type="CT_Path">
        </xs:element>

    <xs:element name="Canvas" type="CT_Canvas">
        </xs:element>

    <xs:element name="GradientStop" type="CT_GradientStop">
        </xs:element>

    <xs:element name="ResourceDictionary" type="CT_ResourceDictionary">
        </xs:element>

    <xs:element name="PathGeometry" type="CT_PathGeometry">
        </xs:element>

    <xs:element name="PathFigure" type="CT_PathFigure">
        </xs:element>

    <xs:element name="PolyLineSegment" type="CT_PolyLineSegment">
        </xs:element>

    <xs:element name="ArcSegment" type="CT_ArcSegment">
        </xs:element>

    <xs:element name="PolyBezierSegment" type="CT_PolyBezierSegment">
        </xs:element>

    <xs:element name="PolyQuadraticBezierSegment" type="CT_PolyQuadraticBezierSegment">
        </xs:element>

    <xs:element name="FixedPage" type="CT_FixedPage">
        </xs:element>

    <xs:element name="FixedDocument" type="CT_FixedDocument">
        </xs:element>

    <xs:element name="PageContent" type="CT_PageContent">
        </xs:element>

    <xs:element name="FixedDocumentSequence" type="CT_FixedDocumentSequence">
        </xs:element>

    <xs:element name="DocumentReference" type="CT_DocumentReference">
        </xs:element>

    <xs:element name="LinkTarget" type="CT_LinkTarget">
        </xs:element>

    <xs:element name="PageContent.LinkTargets" type="CT_CP_LinkTargets">
        </xs:element>

    <xs:element name="ImageBrush.Transform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="VisualBrush.Transform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="LinearGradientBrush.Transform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="RadialGradientBrush.Transform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="PathGeometry.Transform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="Glyphs.RenderTransform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="Path.RenderTransform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="Canvas.RenderTransform" type="CT_CP_Transform">
        </xs:element>

    <xs:element name="VisualBrush.Visual" type="CT_CP_Visual">
        </xs:element>

    <xs:element name="LinearGradientBrush.GradientStops" type="CT_CP_GradientStops">
        </xs:element>

    <xs:element name="RadialGradientBrush.GradientStops" type="CT_CP_GradientStops">
        </xs:element>

    <xs:element name="Glyphs.Clip" type="CT_CP_Geometry">
        </xs:element>

    <xs:element name="Path.Clip" type="CT_CP_Geometry">
        </xs:element>

    <xs:element name="Canvas.Clip" type="CT_CP_Geometry">
        </xs:element>

    <xs:element name="Glyphs.OpacityMask" type="CT_CP_Brush">
        </xs:element>

    <xs:element name="Path.OpacityMask" type="CT_CP_Brush">
        </xs:element>

    <xs:element name="Canvas.OpacityMask" type="CT_CP_Brush">
        </xs:element>

    <xs:element name="Glyphs.Fill" type="CT_CP_Brush">
        </xs:element>

    <xs:element name="Path.Fill" type="CT_CP_Brush">
        </xs:element>

    <xs:element name="Path.Data" type="CT_CP_Geometry">
        </xs:element>

    <xs:element name="Path.Stroke" type="CT_CP_Brush">
        </xs:element>

    <xs:element name="Canvas.Resources" type="CT_CP_Resources">
        </xs:element>

    <xs:element name="FixedPage.Resources" type="CT_CP_Resources">
        </xs:element>

    <xs:attributeGroup name="AG_GradientStop">
        <xs:attribute name="Color" type="ST_Color" use="required">
            </xs:attribute>
        <xs:attribute name="Offset" type="ST_Double" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_Brush">
        <xs:attribute name="Opacity" type="ST_ZeroOne" default="1.0">
            </xs:attribute>
        <xs:attribute ref="x:Key" />
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_TileBrush">
        <xs:attribute name="Transform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute name="Viewbox" type="ST_ViewBox" use="required">
            </xs:attribute>
        <xs:attribute name="Viewport" type="ST_ViewBox" use="required">
            </xs:attribute>
        <xs:attribute name="TileMode" type="ST_TileMode" default="None">
            </xs:attribute>
        <xs:attribute name="ViewboxUnits" type="ST_ViewUnits" use="required" fixed="Absolute">
            </xs:attribute>
        <xs:attribute name="ViewportUnits" type="ST_ViewUnits" use="required" fixed="Absolute">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_VisualBrush">
        <xs:attribute name="Visual" type="ST_RscRef">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_GradientBrush">
        <xs:attribute name="ColorInterpolationMode" type="ST_ClrIntMode" default="SRgbLinearInterpolation">
            </xs:attribute>
        <xs:attribute name="SpreadMethod" type="ST_SpreadMethod" default="Pad">
            </xs:attribute>
        <xs:attribute name="MappingMode" type="ST_MappingMode" use="required" fixed="Absolute">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_SolidColorBrush">
        <xs:attribute name="Color" type="ST_Color" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_ImageBrush">
        <xs:attribute name="ImageSource" type="ST_UriCtxBmp" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_LinearGradientBrush">
        <xs:attribute name="Transform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute name="StartPoint" type="ST_Point" use="required">
            </xs:attribute>
        <xs:attribute name="EndPoint" type="ST_Point" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_RadialGradientBrush">
        <xs:attribute name="Transform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute name="Center" type="ST_Point" use="required">
            </xs:attribute>
        <xs:attribute name="GradientOrigin" type="ST_Point" use="required">
            </xs:attribute>
        <xs:attribute name="RadiusX" type="ST_GEZero" use="required">
            </xs:attribute>
        <xs:attribute name="RadiusY" type="ST_GEZero" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_PathGeometry">
        <xs:attribute name="Figures" type="ST_AbbrGeom">
            </xs:attribute>
        <xs:attribute name="FillRule" type="ST_FillRule" default="EvenOdd">
            </xs:attribute>
        <xs:attribute name="Transform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute ref="x:Key" />
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_ResourceDictionary">
        <xs:attribute name="Source" type="xs:anyURI">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_PolyLineSegment">
        <xs:attribute name="Points" type="ST_Points" use="required">
            </xs:attribute>
        <xs:attribute name="IsStroked" type="ST_Boolean" default="true">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_ArcSegment">
        <xs:attribute name="Point" type="ST_Point" use="required">
            </xs:attribute>
        <xs:attribute name="Size" type="ST_PointGE0" use="required">
            </xs:attribute>
        <xs:attribute name="RotationAngle" type="ST_Double" use="required">
            </xs:attribute>
        <xs:attribute name="IsLargeArc" type="ST_Boolean" use="required">
            </xs:attribute>
        <xs:attribute name="SweepDirection" type="ST_SweepDirection" use="required">
            </xs:attribute>
        <xs:attribute name="IsStroked" type="ST_Boolean" default="true">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_PolyBezierSegment">
        <xs:attribute name="Points" type="ST_Points" use="required">
            </xs:attribute>
        <xs:attribute name="IsStroked" type="ST_Boolean" default="true">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_PolyQuadraticBezierSegment">
        <xs:attribute name="Points" type="ST_Points" use="required">
            </xs:attribute>
        <xs:attribute name="IsStroked" type="ST_Boolean" default="true">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_Glyphs">
        <xs:attribute name="BidiLevel" default="0">
            <xs:simpleType>
              <xs:restriction base="xs:integer">
                <xs:minInclusive value="0" />
                <xs:maxInclusive value="61" />
              </xs:restriction>
            </xs:simpleType>
            </xs:attribute>
        <xs:attribute name="CaretStops" type="ST_CaretStops">
            </xs:attribute>
        <xs:attribute name="DeviceFontName" type="ST_UnicodeString">
            </xs:attribute>
        <xs:attribute name="Fill" type="ST_RscRefColor">
            </xs:attribute>
        <xs:attribute name="FontRenderingEmSize" type="ST_GEZero" use="required">
            </xs:attribute>
        <xs:attribute name="FontUri" type="xs:anyURI" use="required">
            </xs:attribute>
        <xs:attribute name="OriginX" type="ST_Double" use="required">
            </xs:attribute>
        <xs:attribute name="OriginY" type="ST_Double" use="required">
            </xs:attribute>
        <xs:attribute name="IsSideways" type="ST_Boolean" default="false">
            </xs:attribute>
        <xs:attribute name="Indices" type="ST_Indices">
            </xs:attribute>
        <xs:attribute name="UnicodeString" type="ST_UnicodeString">
            </xs:attribute>
        <xs:attribute name="StyleSimulations" type="ST_StyleSimulations" default="None">
            </xs:attribute>
        <xs:attribute name="RenderTransform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute name="Clip" type="ST_RscRefAbbrGeomF">
            </xs:attribute>
        <xs:attribute name="Opacity" type="ST_ZeroOne" default="1.0">
            </xs:attribute>
        <xs:attribute name="OpacityMask" type="ST_RscRef">
            </xs:attribute>
        <xs:attribute name="Name" type="ST_Name">
            </xs:attribute>
        <xs:attribute name="FixedPage.NavigateUri" type="xs:anyURI">
            </xs:attribute>
        <xs:attribute ref="xml:lang">
            </xs:attribute>
        <xs:attribute ref="x:Key" />
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_Path">
        <xs:attribute name="Data" type="ST_RscRefAbbrGeomF">
            </xs:attribute>
        <xs:attribute name="Fill" type="ST_RscRefColor">
            </xs:attribute>
        <xs:attribute name="RenderTransform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute name="Clip" type="ST_RscRefAbbrGeomF">
            </xs:attribute>
        <xs:attribute name="Opacity" type="ST_ZeroOne" default="1.0">
            </xs:attribute>
        <xs:attribute name="OpacityMask" type="ST_RscRef">
            </xs:attribute>
        <xs:attribute name="Stroke" type="ST_RscRefColor">
            </xs:attribute>
        <xs:attribute name="StrokeDashArray" type="ST_EvenArrayPos">
            </xs:attribute>
        <xs:attribute name="StrokeDashCap" type="ST_DashCap" default="Flat">
            </xs:attribute>
        <xs:attribute name="StrokeDashOffset" type="ST_Double" default="0.0">
            </xs:attribute>
        <xs:attribute name="StrokeEndLineCap" type="ST_LineCap" default="Flat">
            </xs:attribute>
        <xs:attribute name="StrokeStartLineCap" type="ST_LineCap" default="Flat">
            </xs:attribute>
        <xs:attribute name="StrokeLineJoin" type="ST_LineJoin" default="Miter">
            </xs:attribute>
        <xs:attribute name="StrokeMiterLimit" type="ST_GEOne" default="10.0">
            </xs:attribute>
        <xs:attribute name="StrokeThickness" type="ST_GEZero" default="1.0">
            </xs:attribute>
        <xs:attribute name="Name" type="ST_Name">
            </xs:attribute>
        <xs:attribute name="FixedPage.NavigateUri" type="xs:anyURI">
            </xs:attribute>
        <xs:attribute ref="xml:lang">
            </xs:attribute>
        <xs:attribute ref="x:Key" />
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_PathFigure">
        <xs:attribute name="IsClosed" type="ST_Boolean" default="false">
            </xs:attribute>
        <xs:attribute name="StartPoint" type="ST_Point" use="required">
            </xs:attribute>
        <xs:attribute name="IsFilled" type="ST_Boolean" default="true">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_Canvas">
        <xs:attribute name="RenderTransform" type="ST_RscRefMatrix">
            </xs:attribute>
        <xs:attribute name="Clip" type="ST_RscRefAbbrGeomF">
            </xs:attribute>
        <xs:attribute name="Opacity" type="ST_ZeroOne" default="1.0">
            </xs:attribute>
        <xs:attribute name="OpacityMask" type="ST_RscRef">
            </xs:attribute>
        <xs:attribute name="Name" type="ST_Name">
            </xs:attribute>
        <xs:attribute name="RenderOptions.EdgeMode" type="ST_EdgeMode">
            </xs:attribute>
        <xs:attribute name="FixedPage.NavigateUri" type="xs:anyURI">
            </xs:attribute>
        <xs:attribute ref="xml:lang">
            </xs:attribute>
        <xs:attribute ref="x:Key" />
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_PageContent">
        <xs:attribute name="Source" type="xs:anyURI" use="required">
            </xs:attribute>
        <xs:attribute name="Width" type="ST_GEOne">
            </xs:attribute>
        <xs:attribute name="Height" type="ST_GEOne">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_LinkTarget">
        <xs:attribute name="Name" type="ST_Name" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_DocumentReference">
        <xs:attribute name="Source" type="xs:anyURI" use="required">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_MatrixTransform">
        <xs:attribute name="Matrix" type="ST_Matrix" use="required">
            </xs:attribute>
        <xs:attribute ref="x:Key" />
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_FixedPage">
        <xs:attribute name="Width" type="ST_GEOne" use="required">
            </xs:attribute>
        <xs:attribute name="Height" type="ST_GEOne" use="required">
            </xs:attribute>
        <xs:attribute name="ContentBox" type="ST_ContentBox">
            </xs:attribute>
        <xs:attribute name="BleedBox" type="ST_BleedBox">
            </xs:attribute>
        <xs:attribute ref="xml:lang" use="required">
            </xs:attribute>
        <xs:attribute name="Name" type="ST_Name">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_AutomationProvider">
        <xs:attribute name="AutomationProperties.Name" type="xs:string">
            </xs:attribute>
        <xs:attribute name="AutomationProperties.HelpText" type="xs:string">
            </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="AG_SnapsToDevicePixels">
        <xs:attribute name="SnapsToDevicePixels" type="ST_Boolean">
            </xs:attribute>
    </xs:attributeGroup>

    <!-- Simple data types -->
    <!-- A Name (ID with pattern restriction according to XPS spec) -->
    <xs:simpleType name="ST_Name">
        <xs:restriction base="xs:ID">
            <xs:pattern value="(\p{Lu}|\p{Ll}|\p{Lt}|\p{Lo}|\p{Nl}|_)(\p{Lu}|\p{Ll}|\p{Lt}|\p{Lo}|\p{Nl}|\p{Mn}|\p{Mc}|\p{Nd}|_)*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Boolean with true and false only (no 0 or 1) -->
    <xs:simpleType name="ST_Boolean">
        <xs:restriction base="xs:boolean">
            <xs:pattern value="true|false" />
        </xs:restriction>
    </xs:simpleType>

    <!-- real number from 0.0 to 1.0 inclusive -->
    <xs:simpleType name="ST_ZeroOne">
        <xs:restriction base="ST_Double">
            <xs:minInclusive value="0.0" />
            <xs:maxInclusive value="1.0" />
        </xs:restriction>
    </xs:simpleType>

    <!-- positive real number -->
    <xs:simpleType name="ST_GEZero">
        <xs:restriction base="ST_Double">
            <xs:minInclusive value="0.0" />
        </xs:restriction>
    </xs:simpleType>

    <!-- positive real number, equal or greater than one -->
    <xs:simpleType name="ST_GEOne">
        <xs:restriction base="ST_Double">
            <xs:minInclusive value="1.0" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Double -->
    <xs:simpleType name="ST_Double">
        <xs:restriction base="xs:double">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[rn]"/>
-->
            <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Point: 2 numbers, separated by , and arbitrary whitespace -->
    <xs:simpleType name="ST_Point">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[rn][scs][rn]"/>
-->
            <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- PointGE0: 2 non-negative numbers, separated by , and arbitrary whitespace -->
    <xs:simpleType name="ST_PointGE0">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[prn][scs][prn]"/>
-->
            <xs:pattern value="(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Points: List of ST_Point, separated by arbitrary whitespace -->
    <xs:simpleType name="ST_Points">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[rn][scs][rn]( [rn][scs][rn])*"/>
-->
            <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- EvenArray: List with even number of entries of non-negative numbers.   -->
    <xs:simpleType name="ST_EvenArrayPos">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[prn] [prn]( [prn] [prn])*"/>
-->
            <xs:pattern value="(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) (\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( (\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) (\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Array: List of numbers.  -->
    <xs:simpleType name="ST_Array">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="([rn] ?)*"/>
-->
            <xs:pattern value="(((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ?)*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- ViewBox: 4 numbers, separated by , and arbitrary whitespace. Second number pair must be non-negative -->
    <xs:simpleType name="ST_ViewBox">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[rn][scs][rn][scs][prn][scs][prn]"/>
-->
            <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- ContentBox: 4 non-negative numbers, separated by commas and arbitrary whitespace -->
    <xs:simpleType name="ST_ContentBox">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[prn][scs][prn][scs][prn][scs][prn]"/>
-->
            <xs:pattern value="(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- BleedBox: 4 numbers, separated by , and arbitrary whitespace. Second number pair must be non-negative -->
        <xs:simpleType name="ST_BleedBox">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[rn][scs][rn][scs][prn][scs][prn]"/>
-->
            <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Bare Matrix form: 6 numbers separated by , and arbitrary whitespace -->
    <xs:simpleType name="ST_Matrix">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="[rn][scs][rn][scs][rn][scs][rn][scs][rn][scs][rn]"/>
-->
            <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Color: 6 or 8 hex digits -->
    <xs:simpleType name="ST_Color">
        <xs:restriction base="xs:string">
            <!-- The pattern restriction does not check for scRGB gamut -->
            <!-- The pattern restriction does not check for color profile URI validity -->
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="(#([0-9a-fA-F]{2})?[0-9a-fA-F]{6})|\
                                (sc# ?[dec][scs][dec][scs][dec]([scs][dec])?)|\
                                (ContextColor +[\S]+ ?[dec]([scs][dec]){3,8})"/>
-->
            <xs:pattern value="(#([0-9a-fA-F]{2})?[0-9a-fA-F]{6})|(sc# ?(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+)))( ?, ?)(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+)))( ?, ?)(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+)))(( ?, ?)(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))))?)|(ContextColor +[\S]+ ?(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+)))(( ?, ?)(\-?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+)))){3,8})" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Indices grammar for Glyphs.CaretStops -->
    <xs:simpleType name="ST_CaretStops">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
            <xs:pattern value="[0-9A-Fa-f]*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Indices grammar for Glyphs.Indices -->
    <xs:simpleType name="ST_Indices">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="(\
                                ((\([pint](:[pint])?\))?[uint])?\
                                (,[prn]?(,[rn]?(,[rn])?)?)?\
                                )\
                                (;\
                                    ((\([pint](:[pint])?\))?[uint])?\
                                    (,[prn]?(,[rn]?(,[rn])?)?)?\
                                )*" />
-->
            <xs:pattern value="(((\(([1-9][0-9]*)(:([1-9][0-9]*))?\))?([0-9]+))?(,(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)?(,((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)?(,((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))?)?)?)(;((\(([1-9][0-9]*)(:([1-9][0-9]*))?\))?([0-9]+))?(,(\+?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)?(,((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)?(,((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))?)?)?)*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- UnicodeString grammar -->
    <xs:simpleType name="ST_UnicodeString">
        <xs:restriction base="xs:string">
            <xs:pattern value="(([^\{]|(\{\})).*)?" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Abbreviated Geometry grammar for Path.Data , clip and Geometries -->
    <xs:simpleType name="ST_AbbrGeomF">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="(F ?(0|1))?\
                                ( ?(M|m)( ?[rn][scs][rn]))\
                                (\
                                    ( ?(M|m)( ?[rn][scs][rn]))|\
                                    ( ?(L|l)( ?[rn][scs][rn])( [rn][scs][rn])*)|\
                                    ( ?(H|h|V|v)( ?[rn])( [rn])*)|\
                                    ( ?(Q|q|S|s)( ?[rn][scs][rn] [rn][scs][rn])(( [rn][scs][rn]){2})*)|\
                                    ( ?(C|c)( ?[rn][scs][rn]( [rn][scs][rn]){2})(( [rn][scs][rn]){3})*)|\
                                    ( ?(A|a)( ?[rn][scs][rn] [rn] [0-1] [0-1] [rn][scs][rn])\
                                                    ( [rn][scs][rn] [rn] [0-1] [0-1] [rn][scs][rn])*)|\
                                    ( ?(Z|z))\
                                )*"/>
-->
            <xs:pattern value="(F ?(0|1))?( ?(M|m)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)))(( ?(M|m)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)))|( ?(L|l)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*)|( ?(H|h|V|v)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*)|( ?(Q|q|S|s)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))(( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)){2})*)|( ?(C|c)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)){2})(( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)){3})*)|( ?(A|a)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) [0-1] [0-1] ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) [0-1] [0-1] ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*)|( ?(Z|z)))*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Abbreviated Geometry grammar for PatGeometry.Figures -->
    <xs:simpleType name="ST_AbbrGeom">
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse" />
<!--
            <xs:pattern value="( ?(M|m)( ?[rn][scs][rn]))\
                                (\
                                    ( ?(M|m)( ?[rn][scs][rn]))|\
                                    ( ?(L|l)( ?[rn][scs][rn])( [rn][scs][rn])*)|\
                                    ( ?(H|h|V|v)( ?[rn])( [rn])*)|\
                                    ( ?(Q|q|S|s)( ?[rn][scs][rn] [rn][scs][rn])(( [rn][scs][rn]){2})*)|\
                                    ( ?(C|c)( ?[rn][scs][rn]( [rn][scs][rn]){2})(( [rn][scs][rn]){3})*)|\
                                    ( ?(A|a)( ?[rn][scs][rn] [rn] [0-1] [0-1] [rn][scs][rn])\
                                                    ( [rn][scs][rn] [rn] [0-1] [0-1] [rn][scs][rn])*)|\
                                    ( ?(Z|z))\
                                )*"/>
-->
            <xs:pattern value="( ?(M|m)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)))(( ?(M|m)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)))|( ?(L|l)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*)|( ?(H|h|V|v)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*)|( ?(Q|q|S|s)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))(( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)){2})*)|( ?(C|c)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)){2})(( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)){3})*)|( ?(A|a)( ?((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) [0-1] [0-1] ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))( ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) [0-1] [0-1] ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)( ?, ?)((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?))*)|( ?(Z|z)))*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Image reference via Uri -->
    <xs:simpleType name="ST_UriImage">
        <xs:restriction base="xs:anyURI">
            <xs:pattern value="([^\{].*)?" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Image reference via ColorConvertedBitmap -->
    <xs:simpleType name="ST_CtxBmpImage">
        <xs:restriction base="xs:string">
            <xs:pattern value="\{ColorConvertedBitmap[\s]+[\S]+[\s]+[\S]+\}[\s]*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Image reference via Uri or ColorConvertedBitmap -->
    <xs:simpleType name="ST_UriCtxBmp">
        <xs:union memberTypes="ST_UriImage ST_CtxBmpImage" />
    </xs:simpleType>

    <!-- Resource reference -->
    <xs:simpleType name="ST_RscRef">
        <xs:restriction base="xs:string">
            <xs:pattern value="\{StaticResource[\s]+[\S]+\}[\s]*" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Resource reference OR Color -->
    <xs:simpleType name="ST_RscRefColor">
        <xs:union memberTypes="ST_Color ST_RscRef" />
    </xs:simpleType>

    <!-- Resource reference OR Compact Matrix-->
    <xs:simpleType name="ST_RscRefMatrix">
        <xs:union memberTypes="ST_Matrix ST_RscRef" />
    </xs:simpleType>

    <!-- Resource reference OR AbbrGeomF-->
    <xs:simpleType name="ST_RscRefAbbrGeomF">
        <xs:union memberTypes="ST_AbbrGeomF ST_RscRef" />
    </xs:simpleType>

    <!-- Sweep Direction enumeration -->
    <xs:simpleType name="ST_SweepDirection">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Clockwise" />
            <xs:enumeration value="Counterclockwise" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Dash Cap enumeration -->
    <xs:simpleType name="ST_DashCap">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Flat" />
            <xs:enumeration value="Round" />
            <xs:enumeration value="Square" />
            <xs:enumeration value="Triangle" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Line Cap enumeration -->
    <xs:simpleType name="ST_LineCap">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Flat" />
            <xs:enumeration value="Round" />
            <xs:enumeration value="Square" />
            <xs:enumeration value="Triangle" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Line Join enumeration -->
    <xs:simpleType name="ST_LineJoin">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Miter" />
            <xs:enumeration value="Bevel" />
            <xs:enumeration value="Round" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Tile Mode enumeration -->
    <xs:simpleType name="ST_TileMode">
        <xs:restriction base="xs:string">
            <xs:enumeration value="None" />
            <xs:enumeration value="Tile" />
            <xs:enumeration value="FlipX" />
            <xs:enumeration value="FlipY" />
            <xs:enumeration value="FlipXY" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Color Interpolation Mode enumeration -->
    <xs:simpleType name="ST_ClrIntMode">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ScRgbLinearInterpolation" />
            <xs:enumeration value="SRgbLinearInterpolation" />
        </xs:restriction>
    </xs:simpleType>

    <!-- SpreadMethod Mode enumeration -->
    <xs:simpleType name="ST_SpreadMethod">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Pad" />
            <xs:enumeration value="Reflect" />
            <xs:enumeration value="Repeat" />
        </xs:restriction>
    </xs:simpleType>

    <!-- FillRule Mode enumeration -->
    <xs:simpleType name="ST_FillRule">
        <xs:restriction base="xs:string">
            <xs:enumeration value="EvenOdd" />
            <xs:enumeration value="NonZero" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Edge Mode enumeration -->
    <xs:simpleType name="ST_EdgeMode">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Aliased" />
        </xs:restriction>
    </xs:simpleType>

    <!-- Style Simulation Enumeration -->
    <xs:simpleType name="ST_StyleSimulations">
        <xs:restriction base="xs:string">
            <xs:enumeration value="None" />
            <xs:enumeration value="ItalicSimulation" />
            <xs:enumeration value="BoldSimulation" />
            <xs:enumeration value="BoldItalicSimulation" />
        </xs:restriction>
    </xs:simpleType>

    <!-- ViewUnits Enumeration -->
    <xs:simpleType name="ST_ViewUnits">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Absolute" />
        </xs:restriction>
    </xs:simpleType>

    <!-- MappingMode Enumeration -->
    <xs:simpleType name="ST_MappingMode">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Absolute" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
